/*
 * @lc app=leetcode.cn id=331 lang=cpp
 *
 * [331] 验证二叉树的前序序列化
 */

// @lc code=start
class Solution {
public:
    bool ans = true;

    bool isValidSerialization(string preorder) {
        // 前序遍历
        preorder += ',';
        int index = 0;
        dfs(preorder, index);
        // 除了ans以外（表示成功建立了一颗树），还需要判断是否遍历完整
        return ans && index == preorder.size();    
    }

    void dfs(string &p, int& i){
        if(i == p.size()){
            //index到达了序列的结尾，却还试图读取字符串
            ans = false;
            return;
        }
        if(p[i] == '#') {
            i += 2;   
            return;
        }
        while(p[i] != ',') i++;
        i++;
        dfs(p,i);
        dfs(p,i);
    }
};
// @lc code=end

